package optymalizacjaSkladowania;

import java.util.Random;
import skladowisko.Kontener;
import skladowisko.Pole;
import skladowisko.Skladowisko;
import skladowisko.Terminal;

public class LosowyAnalitykSkladowania extends ProstyAnalitykSkladowania
{

    Random r = new Random();

    public LosowyAnalitykSkladowania(Terminal t)
    {
        super(t);
    }

    public LosowyAnalitykSkladowania()
    {
    }

    @Override
    protected boolean przydzielMiejsceKontenerowi(Kontener k, PropozycjaPrzydzialow propozycja)
    {
        int ileSkl = terminal.getSkladowiska().size();
        Skladowisko skl = terminal.getSkladowiska().get(r.nextInt(ileSkl));


        Pole p = skl.getPole(r.nextInt(skl.getKolumny()) + 1, r.nextInt(skl.getRzedy()) + 1);
        if (p.getZawartoscPola().isPelne())
        {
            return przydzielMiejsceKontenerowi(k, propozycja);
        }

        if (propozycja.czyMiejsceZajete(p.getZawartoscPola().getPierwszaWolnaWarstwa()))
        {
            return przydzielMiejsceKontenerowi(k, propozycja);
        }

        Przydzial przydzial = new Przydzial(p.getZawartoscPola().getPierwszaWolnaWarstwa(), k);
        p.getZawartoscPola().rezerwujPierwszaWolna();
        propozycja.addPrzydzial(przydzial);
        return true;
    }

    @Override
    public String toString()
    {
        return "Analityk przydzielający losowe wolne miejsce na składowisku";
    }
}
